package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IChannelGroupDAO;
import org.jsola.hr.dto.ChannelGroupAddDTO;
import org.jsola.hr.dto.ChannelGroupUpdateDTO;
import org.jsola.hr.entity.ChannelGroupDO;
import org.jsola.hr.query.ChannelGroupQuery;
import org.jsola.hr.vo.ChannelGroupListVO;
import org.jsola.hr.vo.ChannelGroupVO;
import org.jsola.hr.vo.ChannelGroupsVO;
import org.jsola.hr.vo.HrUserVO;
import org.jsola.salary.query.ChannelFeeSettlementQuery;
import org.jsola.salary.vo.ChannelFeeSettlementVO;
import org.jsola.salary.vo.excel.ChannelFeeSettlementExportVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 渠道分组表
 *
 * @author zhr
 */
public interface IChannelGroupService extends IService<IChannelGroupDAO, ChannelGroupDO> {

    /**
     * 查询渠道分组表
     *
     * @param channelGroupQuery 渠道分组表查询参数
     * @param tokenUser         当前用户
     * @return page
     */
    Page<HrUserVO> getNotDistributionUser(ChannelGroupQuery channelGroupQuery, TokenUser tokenUser);

    /**
     * 通过分组名查询
     *
     * @param channelName 渠道分组名
     * @param tokenUser   当前用户
     * @return 渠道分组表详情信息
     */
    ChannelGroupVO selectByChannelName(String channelName, TokenUser tokenUser);


    /**
     * 查询渠道分组表
     *
     * @param channelGroupQuery 查询条件
     * @param tokenUser         当前用户
     * @return 渠道分组
     */
    ChannelGroupsVO getMyChannelGroup(ChannelGroupQuery channelGroupQuery, TokenUser tokenUser);

    /**
     * 新增渠道分组表
     *
     * @param channelGroupAddDTO 新增渠道分组表DTO
     * @param tokenUser          当前用户
     * @return 渠道分组表详情信息
     */
    ChannelGroupVO save(ChannelGroupAddDTO channelGroupAddDTO, TokenUser tokenUser);

    /**
     * 修改渠道分组表
     *
     * @param channelGroupUpdateDTO 修改渠道分组表DTO
     * @param tokenUser             当前用户
     * @return 更新数量
     */
    int update(ChannelGroupUpdateDTO channelGroupUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除渠道分组表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser       当前用户
     * @param channelGroupIds 渠道分组表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... channelGroupIds);

    /**
     * 根据渠道分组表id查找
     *
     * @param channelGroupId 渠道分组表id
     * @param siteId         所属站点id
     * @return 渠道分组表详情信息
     */
    ChannelGroupVO selectById(String channelGroupId, String siteId);

    /**
     * 查询渠道分组表
     *
     * @param channelGroupQuery 查询条件
     * @param siteId            所属站点id
     * @return 渠道分组表列表信息
     */
    List<ChannelGroupListVO> select(ChannelGroupQuery channelGroupQuery, String siteId);

    /**
     * 查询渠道分组表记录数
     *
     * @param channelGroupQuery 查询条件
     * @param siteId            所属站点id
     * @return 渠道分组表记录数
     */
    int selectCount(ChannelGroupQuery channelGroupQuery, String siteId);

    /**
     * 分页查询渠道分组表
     *
     * @param channelGroupQuery 查询条件
     * @param siteId            所属站点id
     * @return 渠道分组表列表信息
     */
    Page<ChannelGroupListVO> selectPage(ChannelGroupQuery channelGroupQuery, String siteId);


    /**
     * 根据渠道分组表id查找
     *
     * @param channelGroupId 渠道分组表id
     * @param siteId         所属站点id
     * @return 渠道分组表
     */
    ChannelGroupDO selectDOById(String channelGroupId, String siteId);

    /**
     * 查询渠道分组表
     *
     * @param channelGroupQuery 查询条件
     * @param siteId            所属站点id
     * @return 渠道分组表列表
     */
    List<ChannelGroupDO> selectDO(ChannelGroupQuery channelGroupQuery, String siteId);

    /**
     * 查询渠道劳务费结算(新)
     *
     * @param channelFeeSettlementQuery 渠道劳务费结算查询参数
     * @param tokenUser                 当前用户
     * @return page
     */
    Page<ChannelFeeSettlementVO> getChannelFeeSettlement(ChannelFeeSettlementQuery channelFeeSettlementQuery, TokenUser tokenUser);

    /**
     * 渠道结算导出
     *
     * @param channelFeeSettlementQuery 条件
     * @param tokenUser                 当前用户
     * @return list
     */
    List<ChannelFeeSettlementExportVO> channelFeeSettlementExport(ChannelFeeSettlementQuery channelFeeSettlementQuery, TokenUser tokenUser);
}


